package cn.zxy.dao;

import cn.zxy.model.Users;
import org.apache.ibatis.annotations.Param;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/*
repository 里面的@Query
extends JpaRepository<Users,Integer>
 */
public interface UserRepAnnotation extends JpaRepository<Users,Integer> {

    //根据名称查询
//    @Query("FROM Users WHERE username=?1") //第一种写法 索引后从1开始 所以后面要跟1
    @Query("FROM Users WHERE username=:username")//第二种写法 username=:username
    public List<Users> findUsersByUsername(@Param("username") String username);

    //执行原生的sql语句

    //nativeQuery 是支持原生sql语句的查询 默认是关闭状态
    @Query(value = "select * from user where username=?1",nativeQuery = true)
    List<Users> queryByUserNameUserSql(String username);

    /**
     * 修改: 需要加上事务 @Transactional
     * 告诉jpa要进行修改删除 添加操作了  @modifying
     */
    @Transactional
    @Modifying
//    @Query("update Users  set username=:username where id=:id")  //方法一
    @Query("update Users u set u.username=:username where u.id=:id")   //方法二
    public int updateUsers(@Param("username") String username,@Param("id") Integer id);

     //删除操作
     @Transactional
     @Modifying
     @Query("delete from Users  where id=?1")
     public int deleteUsersBy(Integer id);

    //模糊查询
    @Query("from Users  where username like %:username")
    List<Users> findByLikeUsername(String username);

}
